// const input = document.getElementById('input');
// const p = document.getElementById('p');
// const obj = {};

// const newObj = new Proxy(obj, {
//   get: function(target, key, receiver) {
//     console.log(`getting ${key}!`);
//     return Reflect.get(target, key, receiver);
//   },
//   set: function(target, key, value, receiver) {
//     console.log(target, key, value, receiver);
//     if (key === 'text') {
//       input.value = value;
//       p.innerHTML = value;
//     }
//     return Reflect.set(target, key, value, receiver);
//   },
// });

// input.addEventListener('keyup', function(e) {
//   newObj.text = e.target.value;
// });
// export default () => new Proxy({}, {
//     get: function (target, key, receiver) {
//         console.log(`getting ${key}!`);
//         return Reflect.get(target, key, receiver);
//     },
//     set: function (target, key, value, receiver) {
//         console.log(target, key, value, receiver);
//         if (key === 'text') {
//             input.value = value;
//             p.innerHTML = value;
//         }
//         return Reflect.set(target, key, value, receiver);
//     },
// });
console.log('aaa')
const Util = window.util
const log = function () {
    return console.log.apply(this, arguments)
}
// 将时间戳转为以 - 分割的数据数组
const getNormalTime = data => {
    var date = new Date(+data);//如果date为13位不需要乘1000
    var Y = date.getFullYear()
    var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1)
    var D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate())
    var h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours())
    var m = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes())
    var s = (date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds())
    return [Y, M, D, h, m, s]
}
// 将字符串转为 nuix 时间戳返回
const getUnixTime = time => {
    return +new Date(time)
}
// 设置表单数据
const setInputDataFromRange = (inputDomArray, rangeValue) => {
    for (let i = 0; i < inputDomArray.length; i++) {
        inputDomArray[i].value = rangeValue[i]
    }
}
// 设置 range 数据
const setRangeDataFromInput = (inputDomArray, domRange) => {
    domRange.value = getUnixTime(setRangeValue(inputDomArray.map(x => x.value)))
}
// 检验函数
const isRightData = (targetData, inputId) => {
    log('aa', targetData)
    // 非数字，负数，小数，小于年份的最小值，大于年份的最大值,空值
    // 边界校验
    let number = +targetData
    // 非数字，负数，小数
    let commonExp = isNaN(number) || targetData[0] === '-' || targetData.includes('.') || targetData === ''
    // 数据位数,
    let dataLengthExp = targetData.length > 2 || targetData.length === 1

    switch (inputId) {
        case '#year':
            let yearExp = commonExp || number < +'2018' || number > +'2019'
            return yearExp ? false : true
        case '#month':
            let monthExp = commonExp || dataLengthExp || number > +'12' || number === +'0' // '00'
            return monthExp ? false : true
        case '#day':
            let dayExp = commonExp || dataLengthExp || number > +'31' || number === +'0'
                || (+window.monthLess === 2) && (number > +'28') // 二月
                || [4, 6, 9, 11].some(x => x === +window.monthLess) && (number > +'30') // 小月
            return dayExp ? false : true
        case '#hour':
            let hourExp = commonExp || dataLengthExp || number > +'23'
            return hourExp ? false : true
        case '#minute':
            let minuteExp = commonExp || dataLengthExp || number > +'59'
            return minuteExp ? false : true
        case '#second':
            let secondExp = commonExp || dataLengthExp || number > +'59'
            return secondExp ? false : true
    }
}
// 设置滑块两端边界
const setRangeValue = data => {
    // 将字符串转换为
    const [year, month, day, hour, minute, second] = data
    // log(a)
    return `${year}-${month}-${day} ${hour}:${minute}:${second}`
}
const toggleClass = () => {
    log('toggle')
    let domContainer = rangeContainer.classList.contains('vilid-fail')
    if (domContainer) {
        log('true')
    } else {
        log('false')
    }
}
const blurEventCb = () => () => {
    // 校验数据
    log('blurEventCb')
    if (false) {
        // success 赋值
        setRangeDataFromInput(inputDomArray, range)
    } else {
        // fail  addclass
        log('toggle')
        toggleClass()
    }
}
// 表单校验类 
// 功能：传入校验规则名称，返回校验结果

class CheckData {
    constructor(invalidConfig) {
        this.rules = invalidConfig.rules
        this.data = invalidConfig.data
    }
    init() {
        // 按照rules执行校验，分局data长度判断，为空返回【】
    }
    // 非空校验

    // 负数校验

    // 小数校验

    // 年份校验

    // 月份校验 [1，3，5，7，8，10，12] -> 31 天 [4，6，9，11] -> 30 天 年份%400 === 0 2->29 否则 28

    // 日期校验 

    // 时 00-23

    // 分 00-59

    // 秒 00-59
}
const init = () => {
    let range = Util.$('#rangeInput')
    let rangeContainer = Util.$('.rangeContainer')
    let start = getUnixTime('2018/07/01')
    let end = getUnixTime('2019/09/12')
    range.min = start
    range.max = end
    range.defaultValue = start // 默认 start 应该是表单输入
    Util.$('#start').innerHTML = setRangeValue(getNormalTime(start))
    Util.$('#end').innerHTML = setRangeValue(getNormalTime(end))
    const inputId = ['#year', '#month', '#day', '#hour', '#minute', '#second']
    const inputDomArray = inputId.map(x => Util.$(x))
    setInputDataFromRange(inputDomArray, getNormalTime(range.value))

    range.addEventListener('click', e => {
        setInputDataFromRange(inputDomArray, getNormalTime(e.target.value))
        // 重置样式
    }, true)

    rangeContainer.addEventListener('blur', e => {
        if (e.target.tagName === 'INPUT') {
            console.log('event blur', e.target.value);
            // 失焦时，校验
            // 1. 校验数据格式
            // 2. 校验是否在范围内
        }
    }, true)
    for (let i = 0; i < inputDomArray.length; i++) {
        const inputDom = inputDomArray[i];
        // oninput 事件，每输入一个字符就触发
        inputDom.addEventListener('input', (e) => {
            // i === 1 && (window.monthLess = e.target.value)
            // isRightData(e.target.value, inputId[i])
            // 拿到校验结果
            log('onlput')
            if (true) {
                // 校验成功，跳到下一个输入框
                if (i + 1 === inputDomArray.length) {
                    log('?将表单数据赋值给range.value?')
                    range.value = getUnixTime(setRangeValue(inputDomArray.map(x => x.value)))
                } else {
                    log('?下一个表单获得焦点?')
                    inputDomArray[i + 1].focus()
                }
            } else {
                // 校验失败，不允许用户输入当前值
                // e.target.value = ''
                log(e.target.value)
            }
        }, false)
    }
}
init()